home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib13.dsk / NIBBLE ILLUSTRATOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  26KB  |  621 lines

  1. 10  REM     **********************
  2. 11  REM     * NIBBLE ILLUSTRATOR *
  3. 12  REM     * BY COLIN FRENCH    *
  4. 13  REM     * COPYRIGHT (C) 1983 *
  5. 14  REM     * BY MICROSPARC, INC *
  6. 15  REM     * LINCOLN, MA. 01773 *
  7. 16  REM     **********************
  8. 180  IF  PEEK(104) = 64  THEN 230
  9. 190  POKE 103,1: POKE 104,64: POKE 16384,0
  10. 200  PRINT  CHR$(4);"RUN NIBBLE ILLUSTRATOR"
  11. 210  REM  ***** INITIALIZATION *******************
  12. 220 :
  13. 230 D$ =  CHR$(4): TEXT : HOME 
  14. 270 L1 = 0:H1 = 3:L2 = 253:H2 = 9
  15. 280  PRINT D$;"BLOAD ITABLE,A$300"
  16. 290  DIM L(255)
  17. 390  TEXT : HOME : VTAB 22: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **": GOTO 430
  18. 400 :
  19. 410  REM  ******* MAIN MENU **********************
  20. 420  TEXT : HOME 
  21. 430  VTAB 3
  22. 440  PRINT  TAB( 7);"**************************"
  23. 450  PRINT  TAB( 7);"*                        *"
  24. 460  PRINT  TAB( 7);"*   NIBBLE ILLUSTRATOR   *"
  25. 470  PRINT  TAB( 7);"*                        *": REM 24 SPACES IN QUOTES
  26. 480  PRINT  TAB( 7);"**************************"
  27. 490  VTAB 10
  28. 500  PRINT  TAB( 9);"E - EDIT VECTOR FILES": PRINT 
  29. 510  PRINT  TAB( 9);"B - BUILD SHAPE TABLE": PRINT 
  30. 520  PRINT  TAB( 9);"V - VIEW  SHAPE TABLE": PRINT 
  31. 530  PRINT  TAB( 9);"? - FOR  INSTRUCTIONS": PRINT 
  32. 540  PRINT  TAB( 9);"<ESC> TO QUIT PROGRAM"
  33. 550  VTAB 24
  34. 560  PRINT  TAB( 9);"WHICH WOULD YOU LIKE? ";
  35. 570  GET Z$
  36. 580  IF Z$ = "E"  THEN 2000
  37. 590  IF Z$ = "B"  THEN 6000
  38. 600  IF Z$ = "V"  THEN 7000
  39. 610  IF Z$ = "?"  THEN LOC = 1: GOTO 8000
  40. 620  IF Z$ =  CHR$(27)  THEN  HOME : POKE 103,1: POKE 104,8: POKE 105,24: POKE 106,8: END 
  41. 630  GOTO 570
  42. 700 :
  43. 710  REM  ****** MULTI-LETTER INPUT **************
  44. 720 :
  45. 730 W$ = ""
  46. 740  GET Z$
  47. 750  IF Z$ =  CHR$(13)  THEN  RETURN 
  48. 760  IF Z$ =  CHR$(8)  THEN 800
  49. 770  IF  LEN(W$) = LMT  THEN 740
  50. 780  IF Z$ = ","  THEN 740
  51. 790  PRINT Z$;:W$ = W$ +Z$: GOTO 740
  52. 800  IF  LEN(W$) = 0  THEN 740
  53. 810  PRINT  CHR$(8);: PRINT " ";: PRINT  CHR$(8);
  54. 820  IF  LEN(W$) = 1  THEN 730
  55. 830 W$ =  LEFT$(W$, LEN(W$) -1): GOTO 740
  56. 1000 :
  57. 1010  REM  ****** DRAW/ERASE CURSOR ***************
  58. 1020 :
  59. 1030  POKE 232,L1: POKE 233,H1: ROT= 0: SCALE= 1
  60. 1040  XDRAW 1 AT XC,YC
  61. 1050  RETURN 
  62. 1100 :
  63. 1110  REM  ****** DRAW/ERASE SMALL SHAPES *********
  64. 1120 :
  65. 1130  IF  PEEK(2561) = 0  THEN 1170
  66. 1140  POKE 232,L2: POKE 233,H2: ROT= 0: SCALE= 1
  67. 1150  DRAW 1 AT 233 + INT(XS/5),40 + INT(YS/5)
  68. 1160  ROT= 16: DRAW 1 AT 266 - INT(YS/5),90 + INT(XS/5)
  69. 1170  RETURN 
  70. 1200 :
  71. 1210  REM  ****** DRAW/ERASE BLOCK ****************
  72. 1220 :
  73. 1230  POKE 232,L1: POKE 233,H1: ROT= 0: SCALE= 1
  74. 1240  DRAW 2 AT OX,OY
  75. 1250  RETURN 
  76. 1300 :
  77. 1310  REM  ****** POSTION CURSOR ******************
  78. 1320 :
  79. 1330  VTAB 22: PRINT "                                       ": REM 39 SPACES IN QUOTES
  80. 1340  PRINT "POSITION CURSOR WHERE PLOTTING SHOULD  "
  81. 1350  PRINT "BEGIN, THEN PRESS THE SPACE BAR       ";
  82. 1360  GET Z$: GOSUB 1000
  83. 1370  IF Z$ = "I"  THEN YC = YC -5: IF YC <0  THEN YC = 2
  84. 1380  IF Z$ = "J"  THEN XC = XC -5: IF XC <0  THEN XC = 2
  85. 1390  IF Z$ = "K"  THEN XC = XC +5: IF XC >219  THEN XC = 217
  86. 1400  IF Z$ = "M"  THEN YC = YC +5: IF YC >159  THEN YC = 157
  87. 1410  IF Z$ = " "  THEN  RETURN 
  88. 1420  IF Z$ = "?"  THEN LOC = 2: GOTO 8000
  89. 1430  GOSUB 1000: GOTO 1360
  90. 1500 :
  91. 1510  REM  **** CONVERT BYTE TO BINARY STRING *****
  92. 1520 :
  93. 1530 B$ = "": IF  INT(BT/128)  THEN BT = BT -128:B$ = B$ +"1": GOTO 1550
  94. 1540 B$ = B$ +"0"
  95. 1550  IF  INT(BT/64)  THEN BT = BT -64:B$ = B$ +"1": GOTO 1570
  96. 1560 B$ = B$ +"0"
  97. 1570  IF  INT(BT/32)  THEN BT = BT -32:B$ = B$ +"1": GOTO 1590
  98. 1580 B$ = B$ +"0"
  99. 1590  IF  INT(BT/16)  THEN BT = BT -16:B$ = B$ +"1": GOTO 1610
  100. 1600 B$ = B$ +"0"
  101. 1610  IF  INT(BT/8)  THEN BT = BT -8:B$ = B$ +"1": GOTO 1630
  102. 1620 B$ = B$ +"0"
  103. 1630  IF  INT(BT/4)  THEN BT = BT -4:B$ = B$ +"1": GOTO 1650
  104. 1640 B$ = B$ +"0"
  105. 1650  IF  INT(BT/2)  THEN BT = BT -2:B$ = B$ +"1": GOTO 1670
  106. 1660 B$ = B$ +"0"
  107. 1670  IF BT  THEN B$ = B$ +"1": GOTO 1690
  108. 1680 B$ = B$ +"0"
  109. 1690  RETURN 
  110. 1700 :
  111. 1710  REM  ****** DRAW LARGE SHAPE ****************
  112. 1720 :
  113. 1730 AA = AD: ROT= 0: SCALE= 1:XC = XS:YC = YS:FER = 0
  114. 1740 BT =  PEEK(AA): IF BT = 0  THEN 1910
  115. 1750  REM  -CONVERT TO BINARY STRING-
  116. 1760  GOSUB 1500
  117. 1770 OX = XC:OY = YC
  118. 1780  IF  MID$ (B$,6,1) = "1"  THEN  HCOLOR= 0: GOSUB 1200: POKE 232,L1: POKE 233,H1: HCOLOR= 3: DRAW SH AT XC,YC
  119. 1790  IF  MID$ (B$,7,2) = "00"  THEN YC = YC -5: IF YC <0  THEN FER = 1:YC = 2: GOTO 1940
  120. 1800  IF  MID$ (B$,7,2) = "11"  THEN XC = XC -5: IF XC <0  THEN FER = 1:XC = 2: GOTO 1940
  121. 1810  IF  MID$ (B$,7,2) = "01"  THEN XC = XC +5: IF XC >219  THEN FER = 1:XC = 217: GOTO 1940
  122. 1820  IF  MID$ (B$,7,2) = "10"  THEN YC = YC +5: IF YC >159  THEN FER = 1:YC = 157: GOTO 1940
  123. 1830 OX = XC:OY = YC
  124. 1840  IF  MID$ (B$,3,3) = "000"  THEN 1900
  125. 1850  IF  MID$ (B$,3,1) = "1"  THEN  HCOLOR= 0: GOSUB 1200: POKE 232,L1: POKE 233,H1: HCOLOR= 3: DRAW SH AT XC,YC
  126. 1860  IF  MID$ (B$,4,2) = "00"  THEN YC = YC -5: IF YC <0  THEN FER = 1:YC = 2: GOTO 1940
  127. 1870  IF  MID$ (B$,4,2) = "11"  THEN XC = XC -5: IF XC <0  THEN FER = 1:XC = 2: GOTO 1940
  128. 1880  IF  MID$ (B$,4,2) = "01"  THEN XC = XC +5: IF XC >219  THEN FER = 1:XC = 217: GOTO 1940
  129. 1890  IF  MID$ (B$,4,2) = "10"  THEN YC = YC +5: IF YC >159  THEN FER = 1:YC = 157: GOTO 1940
  130. 1900 AA = AA +1: GOTO 1740
  131. 1910  IF AA = AD  THEN 1940
  132. 1920  IF  MID$ (B$,3,3) = "000"  THEN AA = AA -1:V = 2: GOTO 1940
  133. 1930 V = 1
  134. 1940  RETURN 
  135. 2000 :
  136. 2010  REM  ***** EDIT VECTOR FILES -PLOTTING ******
  137. 2020 :
  138. 2030 HC = 3:XC = 112:YC = 82: HGR 
  139. 2040  HOME : VTAB 21
  140. 2050  INVERSE : PRINT " *EDIT VECTOR FILES*    ?-INSTRUCTIONS  ";: NORMAL 
  141. 2060  REM  -DRAW CURSOR-
  142. 2070  GOSUB 1000
  143. 2080 AD = 2561:AA = AD:V = 1
  144. 2090  REM  -POKE IN HEADER-
  145. 2100  POKE AD -1,0: POKE AD -2,4
  146. 2110  POKE AD -3,0: POKE AD -4,1
  147. 2120  POKE AA,0: POKE AA +1,0
  148. 2130  REM  -DRAW DIVIDING LINE-
  149. 2140  HCOLOR= 3: HPLOT 221,0 TO 221,158 TO 222,158 TO 222,0
  150. 2150  REM  -POSITION CURSOR-
  151. 2160  GOSUB 1300
  152. 2170 XS = XC:YS = YC
  153. 2180  VTAB 22: HTAB 1: PRINT "B-BACK UP ONE   S-SAVE SHAPE   C-COLOR "
  154. 2190  PRINT "E-ERASE SHAPE   L-LOAD SHAPE   V-VIEW   ";
  155. 2200  PRINT "R- RE-PLOT      <ESC>  MENU    D-DOS  ";
  156. 2210  REM  -DRAW CURSOR-
  157. 2220  GOSUB 1000:LOC = 3
  158. 2230  REM  -DRAW SMALL SHAPES-
  159. 2240  HCOLOR= HC: GOSUB 1100
  160. 2250  REM  -GET COMMAND-
  161. 2260  GET Z$: GOSUB 1000:OX = XC:OY = YC
  162. 2270  HCOLOR= 0: GOSUB 1100
  163. 2280  IF Z$ =  CHR$(27)  THEN 400
  164. 2290  IF Z$ = "?"  THEN 8000
  165. 2300  IF Z$ = "B"  THEN 3000
  166. 2310  IF Z$ = "E"  THEN  HGR : GOTO 2040
  167. 2320  IF Z$ = "R"  THEN SH = 3: GOSUB 1700: GOTO 2040
  168. 2330  IF Z$ = "S"  THEN LOC = 4: GOTO 3400
  169. 2340  IF Z$ = "L"  THEN LOC = 5: GOTO 3600
  170. 2350  IF Z$ = "C"  THEN 3800
  171. 2360  IF Z$ = "V"  THEN LOC = 7: GOTO 4200
  172. 2370  IF Z$ = "D"  THEN LOC = 6: GOTO 3900
  173. 2380  REM  -CURSOR/PLOTTING MOVES-
  174. 2390  IF Z$ = "I"  THEN  GOSUB 2500: GOSUB 2620:V1$ = "0": GOTO 2700
  175. 2400  IF Z$ = "J"  THEN  GOSUB 2530:V1$ = "0": GOTO 2700
  176. 2410  IF Z$ = "K"  THEN  GOSUB 2560:V1$ = "0": GOTO 2700
  177. 2420  IF Z$ = "M"  THEN  GOSUB 2590:V1$ = "0": GOTO 2700
  178. 2430  IF Z$ =  CHR$(9)  THEN  GOSUB 2500:V1$ = "1": HCOLOR= 3: GOSUB 1200: GOTO 2700
  179. 2440  IF Z$ =  CHR$(10)  THEN  GOSUB 2530:V1$ = "1": HCOLOR= 3: GOSUB 1200: GOTO 2700
  180. 2450  IF Z$ =  CHR$(11)  THEN  GOSUB 2560:V1$ = "1": HCOLOR= 3: GOSUB 1200: GOTO 2700
  181. 2460  IF Z$ =  CHR$(13)  THEN  GOSUB 2590:V1$ = "1": HCOLOR= 3: GOSUB 1200: GOTO 2700
  182. 2470  GOTO 2210
  183. 2500  REM  -UP VECTOR-
  184. 2510 YC = YC -5: IF YC <0  THEN YC = 2: POP : GOTO 2210
  185. 2520 V2$ = "00": RETURN 
  186. 2530  REM  -LEFT VECTOR-
  187. 2540 XC = XC -5: IF XC <0  THEN XC = 2: POP : GOTO 2210
  188. 2550 V2$ = "11": RETURN 
  189. 2560  REM  -RIGHT VECTOR-
  190. 2570 XC = XC +5: IF XC >219  THEN XC = 217: POP : GOTO 2210
  191. 2580 V2$ = "01": RETURN 
  192. 2590  REM  -DOWN VECTOR-
  193. 2600 YC = YC +5: IF YC >159  THEN YC = 157: POP : GOTO 2210
  194. 2610 V2$ = "10": RETURN 
  195. 2620  REM  -UP-NO-PLOT CHECKING-
  196. 2630  IF V = 1  THEN 2660
  197. 2640  IF VK$(1) < >"000"  THEN VK$ = "00000" +VK$(1): GOSUB 2800:AA = AA +1:V = 1: GOTO 2660
  198. 2650 VK$ = "00011" +VK$(1): GOSUB 2800:AA = AA +1:VK$ = "00001000": GOSUB 2800:AA = AA +1:V = 1: POP : GOTO 2210
  199. 2660  RETURN 
  200. 2700  REM  -SET UP VECTORS TO BE POKED-
  201. 2710 VK$(V) = V1$ +V2$
  202. 2720  IF V = 1  THEN VK$ = "00000" +VK$(1)
  203. 2730  IF V = 2  THEN VK$ = "00" +VK$(2) +VK$(1)
  204. 2740  GOSUB 2800
  205. 2750  IF V = 1  THEN V = 2: GOTO 2210
  206. 2760 V = 1:AA = AA +1: GOTO 2210
  207. 2800  REM  -POKING OF VECTORS-
  208. 2810 BT = 0
  209. 2820  FOR N = 1 TO 8
  210. 2830  IF  MID$ (VK$,N,1) = "0"  THEN 2850
  211. 2840 BT = BT +2 ^(8 -N)
  212. 2850  NEXT N
  213. 2860  POKE AA,BT: POKE AA +1,0
  214. 2870  RETURN 
  215. 3000 :
  216. 3010  REM  ****** BACK UP ONE *********************
  217. 3020 :
  218. 3030  IF AA = AD  AND  PEEK(AA) = 0  AND V = 1  THEN 3230
  219. 3040  REM  -ERASE SMALL SHAPES-
  220. 3050  HCOLOR= 0: GOSUB 1100
  221. 3060  IF V = 2  THEN BT =  PEEK(AA)
  222. 3070  IF V = 1  THEN BT =  PEEK(AA -1)
  223. 3080  REM  -CONVERT TO BINARY STRING-
  224. 3090  GOSUB 1500
  225. 3100  IF V = 1  AND  MID$ (B$,3,3) = "000"  THEN V = 2:AA = AA -1: GOTO 3060
  226. 3110  IF V = 2  THEN V1$ =  MID$ (B$,6,1):V2$ =  MID$ (B$,7,2)
  227. 3120  IF V = 1  THEN V1$ =  MID$ (B$,3,1):V2$ =  MID$ (B$,4,2)
  228. 3130  REM  -MOVE CURSOR-
  229. 3140  IF V2$ = "00"  THEN YC = YC +5
  230. 3150  IF V2$ = "11"  THEN XC = XC +5
  231. 3160  IF V2$ = "01"  THEN XC = XC -5
  232. 3170  IF V2$ = "10"  THEN YC = YC -5
  233. 3180  REM  -ERASE BLOCK-
  234. 3190  IF V1$ = "1"  THEN  HCOLOR= 0:OX = XC:OY = YC: GOSUB 1200
  235. 3200  REM  -ERASE VECTOR-
  236. 3210  IF V = 2  THEN V = 1: POKE AA,0: GOTO 3230
  237. 3220 V = 2:AA = AA -1:BT =  PEEK(AA): GOSUB 1500:VK$(1) =  MID$ (B$,6,3):VK$ = "00000" +VK$(1): GOSUB 2800
  238. 3230  GOTO 2210
  239. 3400 :
  240. 3410  REM  ***** SAVE VECTOR FILE *****************
  241. 3420 :
  242. 3430  IF AA = AD  AND  PEEK(AA) = 0  THEN 2210
  243. 3440  VTAB 22: HTAB 1: PRINT "       <ESC> TO ABORT                  "
  244. 3450  PRINT "NAME FOR VECTOR FILE? VECTORS/         "
  245. 3460  PRINT "                                       ";: REM 39 SPACES IN QUOTES
  246. 3470  VTAB 23: HTAB 31:LMT = 22: GOSUB 700
  247. 3480  IF W$ = ""  OR W$ =  CHR$(27)  THEN 2180
  248. 3490  IF W$ = "?"  THEN 8000
  249. 3500  VTAB 22: HTAB 39: PRINT : ONERR  GOTO 5000
  250. 3510  PRINT D$;"BSAVE VECTORS/";W$;",A2561,L";AA -AD +2
  251. 3520  POKE 216,0: GOTO 2180
  252. 3600 :
  253. 3610  REM  ***** LOAD VECTOR FILE *****************
  254. 3620 :
  255. 3630  VTAB 22: HTAB 1: PRINT "        <ESC> TO ABORT                 "
  256. 3640  PRINT "NAME OF VECTOR FILE? VECTORS/          "
  257. 3650  PRINT "                                       ";: REM 39 SPACES IN QUOTES
  258. 3660  VTAB 23: HTAB 30:LMT = 22: GOSUB 700
  259. 3670  IF W$ = ""  OR W$ =  CHR$(27)  THEN 2180
  260. 3680  IF W$ = "?"  THEN 8000
  261. 3690  VTAB 22: HTAB 39: PRINT : ONERR  GOTO 5000
  262. 3700  PRINT D$;"BLOAD VECTORS/";W$;",A2561": POKE 216,0
  263. 3710  HGR : HCOLOR= 3: HPLOT 221,0 TO 221,158 TO 222,158 TO 222,0
  264. 3720 SH = 2: GOSUB 1700
  265. 3730  IF FED = 0  THEN 2180
  266. 3740  HOME : GOSUB 1000: VTAB 22: PRINT "IT WON'T FIT STARTING FROM THAT CURSOR"
  267. 3750  PRINT "POSITION. TRY ANOTHER. (PUSH <RETURN>) ";
  268. 3760  GET Z$: HOME : VTAB 21: INVERSE : PRINT " *EDIT VECTOR FILES*     ?-INSTRUCTIONS ";: NORMAL : IF Z$ =  CHR$(27)  THEN 2180
  269. 3770  IF Z$ = "?"  THEN 8000
  270. 3780  GOSUB 1300:XS = XC:YS = YC: GOTO 3710
  271. 3800 :
  272. 3810  REM  ***** CHANGE COLOR *********************
  273. 3820 :
  274. 3830 HC = HC +1: IF HC >6  THEN HC = 1
  275. 3840  IF HC = 4  THEN HC = 5
  276. 3850  GOTO 2210
  277. 3900 :
  278. 3910  REM  ******* DOS COMMANDS *******************
  279. 3920 :
  280. 3930  HOME : VTAB 21: INVERSE : PRINT " *EDIT VECTOR FILES*     ?-INSTRUCTIONS ";: NORMAL 
  281. 3940  PRINT "DOS COMMANDS:  C-CATALOG"
  282. 3950  PRINT  TAB( 16);"D-DELETE"
  283. 3960  PRINT  TAB( 16);"<ESC> TO RETURN   ";
  284. 3970  GET Z$: IF Z$ =  CHR$(27)  THEN  POKE  -16304,0: GOTO 2180
  285. 3980  IF Z$ = "?"  THEN 8000
  286. 3990  IF Z$ = "C"  THEN 4020
  287. 4000  IF Z$ = "D"  THEN 4060
  288. 4010  GOTO 3970
  289. 4020  TEXT : POKE 35,20: VTAB 1: HOME : PRINT 
  290. 4030  PRINT D$;"CATALOG"
  291. 4040  POKE 35,24: VTAB 24: HTAB 33
  292. 4050  GOTO 3970
  293. 4060  VTAB 22: HTAB 1: PRINT "     <ESC> TO ABORT                    "
  294. 4070  PRINT "FILE TO BE DELETED?                                                            ";: VTAB 23: HTAB 22
  295. 4080 LMT = 30: GOSUB 700: IF W$ = ""  OR W$ =  CHR$(27)  THEN 3930
  296. 4090  VTAB 22: HTAB 39: PRINT : ONERR  GOTO 5000
  297. 4100  PRINT D$;"DELETE ";W$
  298. 4110  POKE 216,0: GOTO 3930
  299. 4200 :
  300. 4210  REM  ******* VIEW SHAPE *********************
  301. 4220 :
  302. 4230  HGR : VTAB 22: HTAB 1
  303. 4240 X = 140:Y = 80: POKE 232,L2: POKE 233,H2
  304. 4250 CC = 3: HCOLOR= CC
  305. 4260 RR = 0: ROT= RR
  306. 4270 SS = 1: SCALE= SS
  307. 4280  PRINT "                                       ": REM 39 SPACES IN QUOTES
  308. 4290  PRINT " C - COLOR (3 )     R - ROTATION (0 )  "
  309. 4300  PRINT " S - SCALE (1 )     <ESC>  TO RETURN   ";
  310. 4310  HCOLOR= CC: DRAW 1 AT X,Y
  311. 4320  GET Z$: HCOLOR= 0: DRAW 1 AT X,Y
  312. 4330  IF Z$ = "?"  THEN 8000
  313. 4340  IF Z$ < > CHR$(27)  THEN 4370
  314. 4350  HGR : HCOLOR= 3: HPLOT 221,0 TO 221,158 TO 222,158 TO 222,0
  315. 4360 SH = 2: GOSUB 1700: GOTO 2180
  316. 4370  IF Z$ < >"C"  THEN 4430
  317. 4380 CC = CC +1: IF CC >6  THEN CC = 1
  318. 4390  IF CC = 4  THEN CC = 5
  319. 4400  VTAB 23: HTAB 13: PRINT "  ";
  320. 4410  HTAB 13: PRINT CC;: VTAB 24: HTAB 40
  321. 4420  GOTO 4310
  322. 4430  IF Z$ < >"S"  THEN 4470
  323. 4440 SS = SS +1: IF SS >10  THEN SS = 1
  324. 4450  SCALE= SS: VTAB 24: HTAB 13: PRINT "  ";
  325. 4460  HTAB 13: PRINT SS;: HTAB 40: GOTO 4310
  326. 4470  IF Z$ < >"R"  THEN 4510
  327. 4480 RR = RR +1: IF RR >63  THEN RR = 0
  328. 4490  ROT= RR: VTAB 23: HTAB 35: PRINT "  ";
  329. 4500  HTAB 35: PRINT RR;: VTAB 24: HTAB 40: GOTO 4310
  330. 4510  IF Z$ = "I"  THEN Y = Y -5: IF Y <0  THEN Y = Y +159
  331. 4520  IF Z$ = "J"  THEN X = X -5: IF X <0  THEN X = X +279
  332. 4530  IF Z$ = "K"  THEN X = X +5: IF X >279  THEN X = X -279
  333. 4540  IF Z$ = "M"  THEN Y = Y +5: IF Y >159  THEN Y = Y -159
  334. 4550  GOTO 4310
  335. 5000 :
  336. 5010  REM  ****** DISK ERROR HANDLING *************
  337. 5020 :
  338. 5030 ER =  PEEK(222): IF LOC = 8  OR LOC = 9  THEN  POKE 35,24
  339. 5040  VTAB 22: HTAB 1
  340. 5050  PRINT "                                       ": REM 39 SPACES IN QUOTES
  341. 5060  PRINT "                                       "
  342. 5070  PRINT "                                       ";: REM 39 SPACES IN QUOTES
  343. 5080  VTAB 23: HTAB 1
  344. 5090  IF ER = 6  THEN  PRINT "THAT FILE IS NOT ON THIS DISK.": GOTO 5150
  345. 5100  IF ER = 9  THEN  PRINT "THERE ISN'T ENOUGH ROOM ON THIS DISK.": GOTO 5150
  346. 5110  IF ER = 10  THEN  PRINT "THAT FILE IS LOCKED.": GOTO 5150
  347. 5120  IF ER = 11  THEN  PRINT "THAT IS NOT A LEGAL FILE NAME.": GOTO 5150
  348. 5130  PRINT "A SYSTEM ERROR #";ER;" HAS OCCURRED IN"
  349. 5140  PRINT "LINE #"; PEEK(218) + PEEK(219) *256: END 
  350. 5150  PRINT "    (PUSH <RETURN>)    ";: GET Z$
  351. 5160  ON LOC GOTO 400,2040,2180,3440,3630,3930,4500,6040,6430,7000,7190
  352. 6000 :
  353. 6010  REM  ****** BUILD SHAPE TABLE ***************
  354. 6020 :
  355. 6030 AD = 2561:AA = AD:SNUM = 1:TL = 0
  356. 6040  TEXT : HOME : VTAB 21
  357. 6050  INVERSE : PRINT " *BUILD SHAPE TABLE*    ?-INSTRUCTIONS  ";: NORMAL 
  358. 6060  PRINT "TYPE:  END <RETURN>  WHEN FINISHED"
  359. 6070  PRINT "        C  <RETURN>  TO DO A CATALOG"
  360. 6080  PRINT "      <ESC><RETURN>  TO ABORT     ";
  361. 6090  REM  -SET TEXT WINDOW-
  362. 6100  POKE 35,20
  363. 6110  HOME 
  364. 6111  PRINT : PRINT "N)EW SHAPE TABLE"
  365. 6112  PRINT "E)XISTING SHAPE TABLE"
  366. 6113  GET W$: PRINT W$: IF W$ = "E"  THEN  GOTO 9500
  367. 6120  PRINT "NAME OF SHAPE ";SNUM;": VECTORS/";
  368. 6130 LMT = 22: GOSUB 700
  369. 6140  IF W$ = ""  OR W$ =  CHR$(27)  THEN  PRINT : GOTO 6500
  370. 6150  IF W$ = "?"  THEN  POKE 35,24:LOC = 8: GOTO 8000
  371. 6160  IF W$ = "C"  THEN  PRINT : PRINT D$;"CATALOG": PRINT : GOTO 6120
  372. 6170  IF W$ = "END"  THEN 6270
  373. 6180 LOC = 8: ONERR  GOTO 5000
  374. 6190  PRINT : PRINT D$;"BLOAD VECTORS/";W$;",A";AA: POKE 216,0
  375. 6200 L(SNUM) =  PEEK( -21920) + PEEK( -21919) *256
  376. 6210 AA = AA +L(SNUM)
  377. 6220 SNUM = SNUM +1
  378. 6230  IF SNUM <256  THEN 6120
  379. 6240  PRINT : PRINT "THAT'S THE MAXIMUM NUMBER OF SHAPES YOU CAN HAVE IN ONE TABLE.   END TABLE OR   ABORT? (E/A) ";: GET Z$
  380. 6250  IF Z$ = "E"  THEN 6270
  381. 6260  GOTO 6500
  382. 6270  REM  -POKE HEADER OF TABLE-
  383. 6280 SNUM = SNUM -1:TL = 0: IF AA = AD  THEN 6500
  384. 6290  FOR N = 1 TO SNUM
  385. 6300 TL = TL +L(N)
  386. 6310  NEXT N
  387. 6320 TTL = TL +SNUM *2 +2:TL = TTL
  388. 6330  FOR N = SNUM TO 1  STEP  -1
  389. 6340 TL = TL -L(N)
  390. 6350 HB =  INT(TL/256)
  391. 6360 LB = TL -HB *256
  392. 6370  POKE AD -(SNUM -N) *2 -1,HB
  393. 6380  POKE AD -(SNUM -N) *2 -2,LB
  394. 6390  NEXT N
  395. 6400  POKE AD -SNUM *2 -1,0
  396. 6410  POKE AD -SNUM *2 -2,SNUM
  397. 6420  PRINT : PRINT "TABLE IS ";TTL;" BYTES LONG."
  398. 6430  PRINT "NAME FOR TABLE?  TABLE/";
  399. 6440 LMT = 22: GOSUB 700
  400. 6450  IF W$ = ""  OR W$ =  CHR$(27)  THEN  PRINT : GOTO 6500
  401. 6460  IF W$ = "?"  THEN LOC = 9: GOTO 8000
  402. 6470 LOC = 9: ONERR  GOTO 6320
  403. 6480  PRINT : PRINT D$;"BSAVE TABLE/";W$;",A";AD -SNUM *2 -2;",L";TTL
  404. 6490  POKE 216,0
  405. 6500  PRINT "DO YOU WANT TO DO ANOTHER? (Y/N) ";: GET Z$
  406. 6510  IF Z$ = "Y"  THEN SNUM = 1:AA = AD: GOTO 6110
  407. 6520  POKE 35,24
  408. 6530  GOTO 400
  409. 7000 :
  410. 7010  REM  ****** VIEW SHAPE TABLE ****************
  411. 7020 :
  412. 7030  HOME : VTAB 21: HGR :LOC = 10
  413. 7040  INVERSE : PRINT " *VIEW SHAPE TABLE*     ?-INSTRUCTIONS  ";: NORMAL 
  414. 7050  PRINT "TYPE <ESC> <RETURN> TO ABORT"
  415. 7060  PRINT "NAME OF TABLE?  TABLE/";
  416. 7070 LMT = 22: GOSUB 700
  417. 7080  IF W$ = ""  OR W$ =  CHR$(27)  THEN 400
  418. 7090  IF W$ = "?"  THEN 8000
  419. 7100  VTAB 23: PRINT 
  420. 7110  ONERR  GOTO 5000
  421. 7120  PRINT D$;"BLOAD TABLE/";W$;",A 2050"
  422. 7130  POKE 216,0
  423. 7140  POKE 232,2: POKE 233,8
  424. 7150 SNUM =  PEEK(2050)
  425. 7160 LOC = 11
  426. 7170 CC = 3: HCOLOR= CC:RR = 0: ROT= RR:SS = 1: SCALE= SS
  427. 7180 X = 140:Y = 80:NN = 1
  428. 7190  HOME : VTAB 21
  429. 7200  INVERSE : PRINT " *VIEW SHAPE TABLE*     ?-INSTRUCTIONS  ";: NORMAL 
  430. 7210  PRINT "<ESC> WHEN FINISHED"
  431. 7220  PRINT "N-UMBER OF SHAPE (1  )   S-CALE    (1 )"
  432. 7230  PRINT "C-HANGE COLOR    (3  )   R-OTATION (0 )";
  433. 7240  HCOLOR= CC: DRAW NN AT X,Y
  434. 7250  GET Z$
  435. 7260  IF Z$ =  CHR$(27)  THEN 400
  436. 7270  IF Z$ = "?"  THEN 8000
  437. 7280  HCOLOR= 0: DRAW NN AT X,Y
  438. 7290  IF Z$ < >"N"  THEN 7340
  439. 7300 NN = NN +1: IF NN >SNUM  THEN NN = 1
  440. 7310  VTAB 23: HTAB 19: PRINT "   ";
  441. 7320  HTAB 19: PRINT NN;: VTAB 24: HTAB 40
  442. 7330  GOTO 7240
  443. 7340  IF Z$ < >"S"  THEN 7390
  444. 7350 SS = SS +1: IF SS >10  THEN SS = 1
  445. 7360  VTAB 23: HTAB 37: PRINT "  ";
  446. 7370  HTAB 37: PRINT SS;: VTAB 24: HTAB 40
  447. 7380  SCALE= SS: GOTO 7240
  448. 7390  IF Z$ < >"R"  THEN 7440
  449. 7400 RR = RR +1: IF RR >63  THEN RR = 0
  450. 7410  VTAB 24: HTAB 37: PRINT "  ";
  451. 7420  HTAB 37: PRINT RR;: HTAB 40
  452. 7430  ROT= RR: GOTO 7240
  453. 7440  IF Z$ < >"C"  THEN 7500
  454. 7450 CC = CC +1: IF CC >6  THEN CC = 1
  455. 7460  IF CC = 4  THEN CC = 5
  456. 7470  VTAB 24: HTAB 19: PRINT "  ";
  457. 7480  HTAB 19: PRINT CC;: HTAB 40
  458. 7490  GOTO 7240
  459. 7500  REM  -MOVE SHAPE AROUND-
  460. 7510  IF Z$ = "I"  THEN Y = Y -5: IF Y <0  THEN Y = 159
  461. 7520  IF Z$ = "J"  THEN X = X -5: IF X <0  THEN X = 279
  462. 7530  IF Z$ = "K"  THEN X = X +5: IF X >279  THEN X = 0
  463. 7540  IF Z$ = "M"  THEN Y = Y +5: IF Y >159  THEN Y = 0
  464. 7550  GOTO 7240
  465. 8000 :
  466. 8010  REM  ****** INSTRUCTIONS ********************
  467. 8020 :
  468. 8030  TEXT : HOME 
  469. 8040  IF LOC = 1  THEN 8090
  470. 8050  ON LOC GOSUB 8300,8600,8600,8990,8990,9150,9150,9320,9320,9320,9320
  471. 8060  VTAB 24: PRINT "(PUSH <ESC> TO RETURN, 'M' FOR MORE)  ";
  472. 8070  GET Z$: IF Z$ =  CHR$(27)  THEN 8230
  473. 8080  IF Z$ < >"M"  THEN 8070
  474. 8090  FOR N = 1 TO 5
  475. 8100  IF N < >2  AND N < >5  THEN 8150
  476. 8110  HOME : VTAB 10
  477. 8120  IF N = 2  THEN  PRINT "*** SECTION ONE:  EDIT VECTOR FILES ***": GOTO 8140
  478. 8130  PRINT "*** SECTION TWO:  BUILD SHAPE TABLE ***"
  479. 8140  FOR D = 1 TO 2500: NEXT D
  480. 8150  HOME : ON N GOSUB 8300,8600,8990,9150,9320
  481. 8160  VTAB 24
  482. 8170  IF N < >5  THEN  PRINT "(PUSH <ESC> TO RETURN, 'M' FOR MORE) ";
  483. 8180  IF N = 5  THEN  PRINT "(PUSH <ESC> TO RETURN, 'R' TO REPEAT) ";
  484. 8190  GET Z$: IF Z$ =  CHR$(27)  THEN 8230
  485. 8200  IF N < >5  AND Z$ < >"M"  THEN 8190
  486. 8210  IF N = 5  AND Z$ < >"R"  THEN 8190
  487. 8220  NEXT N: GOTO 8090
  488. 8230  HOME : POKE  -16304,0
  489. 8240  IF LOC = 3  OR LOC = 4  OR LOC = 5  OR LOC = 7  THEN  INVERSE : VTAB 21: PRINT " *EDIT VECTOR FILES*     ?-INSTRUCTIONS ";: NORMAL 
  490. 8250  ON LOC GOTO 400,2040,2180,3400,3600,3900,4200,6040,6040,7000,7190
  491. 8300  REM  -PAGE ONE-
  492. 8310  PRINT : PRINT  TAB( 8);"*** NIBBLE ILLUSTRATOR ***": PRINT 
  493. 8320  PRINT "  THIS GRAPHICS UTILITY PROGRAM MAKES IT";
  494. 8330  PRINT "EASY TO CONSTRUCT COMPLEX SHAPE TABLES"
  495. 8340  PRINT "FOR USE IN YOUR OWN PROGRAMS.": PRINT 
  496. 8350  PRINT "  SECTION 1 'EDIT VECTOR FILES' IS USED"
  497. 8360  PRINT "TO DESIGN SHAPES. THE SET OF VECTORS"
  498. 8370  PRINT "DESCRIBING THE SHAPE IS SAVED TO DISK,"
  499. 8380  PRINT "CREATING A DISK LIBRARY OF SHAPES.": PRINT 
  500. 8390  PRINT "  SECTION 2 'BUILD SHAPE TABLE' COMBINES";
  501. 8400  PRINT "SHAPES FROM THIS LIBRARY INTO A FINISHED";
  502. 8410  PRINT "SHAPE TABLE.": PRINT 
  503. 8420  PRINT "  FOR MORE INFORMATION ON SHAPE TABLES"
  504. 8430  PRINT "AND HOW TO USE THEM SEE PAGES 91 TO 100"
  505. 8440  PRINT "OF THE APPLESOFT MANUAL."
  506. 8450  VTAB 24: PRINT "(PUSH <ESC> TO RETURN, 'M' FOR MORE) ";
  507. 8460  GET Z$: IF Z$ =  CHR$(27)  THEN  POP : GOTO 8230
  508. 8470  IF Z$ < >"M"  THEN 8460
  509. 8480  HOME : PRINT "  AT MOST LOCATIONS IN THE PROGRAM YOU"
  510. 8490  PRINT "MAY ESCAPE FROM THE FUNCTION BEING USED"
  511. 8500  PRINT "BY PUSHING THE <ESC> KEY. AT LOCATIONS"
  512. 8510  PRINT "WHERE YOU ARE EXPECTED TO INPUT A FULL"
  513. 8520  PRINT "WORD, SUCH AS THE NAME FOR A FILE, TO"
  514. 8530  PRINT "ESCAPE YOU MUST ENTER <ESC> <RETURN>.": PRINT 
  515. 8540  PRINT "  YOU MAY ALSO GET INSTRUCTIONS FROM"
  516. 8550  PRINT "ANYWHERE IN THE PROGRAM BY ENTERING A"
  517. 8560  PRINT "'?', AND PUSHING <RETURN> IF REQUIRED.": PRINT 
  518. 8570  PRINT "  WHAT FOLLOWS IS A DESCRIPTION OF EACH"
  519. 8580  PRINT "FUNCTION IN BOTH OF THE SECTIONS."
  520. 8590  RETURN 
  521. 8600  REM  -PAGE TWO-
  522. 8610  PRINT "PLOTTING:": PRINT 
  523. 8620  PRINT "  THE CURSOR MAY BE MOVED ANYWHERE IN"
  524. 8630  PRINT "THE 32 X 44 SQUARE PLOTTING AREA BEFORE"
  525. 8640  PRINT "STARTING. USE THE I,J,K & M KEYS TO MOVE";
  526. 8650  PRINT "UP, LEFT, RIGHT AND DOWN RESPECTIVELY."
  527. 8660  PRINT "PUSH THE SPACE BAR WHEN YOU HAVE REACHED";
  528. 8670  PRINT "YOUR STARTING POINT.": PRINT 
  529. 8680  PRINT "  PLOT POINTS BY USING THE I,J,K & M "
  530. 8690  PRINT "KEYS AGAIN TO MOVE THE CURSOR.  PUSHING"
  531. 8700  PRINT "JUST THE KEY WILL MOVE THE CURSOR IN THE";
  532. 8710  PRINT "PROPER DIRECTION, CREATING A 'NO-PLOT'"
  533. 8720  PRINT "VECTOR. HOLDING DOWN THE 'CTRL' KEY AND"
  534. 8730  PRINT "PUSHING I,J,K OR M WILL PLOT THE BLOCK"
  535. 8740  PRINT "THE CURSOR IS ON BEFORE MOVING IN THE"
  536. 8750  PRINT "APPROPRIATE DIRECTION.  THIS CREATES A"
  537. 8760  PRINT "'PLOT' TYPE VECTOR."
  538. 8770  VTAB 24: PRINT "(PUSH <ESC> TO RETURN, 'M' FOR MORE) ";
  539. 8780  GET Z$: IF Z$ =  CHR$(27)  THEN  POP : GOTO 8230
  540. 8790  IF Z$ < >"M"  THEN 8780
  541. 8800  HOME : PRINT "  ON THE RIGHT HAND SIDE OF THE SCREEN"
  542. 8810  PRINT "THE SHAPE YOU ARE PLOTTING IS DISPLAYED"
  543. 8820  PRINT "WITH ROTATION SET TO ZERO AND SCALE SET"
  544. 8830  PRINT "TO ONE.  BELOW THIS IS THE SAME SHAPE"
  545. 8840  PRINT "DISPLAYED WITH ROTATION SET TO 16. THE"
  546. 8850  PRINT "COLOR OF THESE SHAPES CAN BE CHANGED BY"
  547. 8860  PRINT "PUSHING THE 'C' KEY.": PRINT 
  548. 8870  PRINT "  IF YOU MAKE AN ERROR YOU CAN BACK UP"
  549. 8880  PRINT "AND 'UN-PLOT' ONE VECTOR AT A TIME BY"
  550. 8890  PRINT "PUSHING THE 'B' KEY.": PRINT 
  551. 8900  PRINT "  YOU MAY ALSO RE-PLOT THE ENTIRE SHAPE"
  552. 8910  PRINT "BY PUSHING THE 'R' KEY.  THE CURSOR IS"
  553. 8920  PRINT "THEN POSITIONED WHERE YOU WANT TO BEGIN"
  554. 8930  PRINT "PLOTTING AND THE BLOCKS PLOTTED IN THE"
  555. 8940  PRINT "USUAL WAY. THE OLD SHAPE REMAINS ON THE"
  556. 8950  PRINT "SCREEN AS A GUIDE.": PRINT 
  557. 8960  PRINT "  TO START ALL OVER AGAIN PUSH THE 'E'"
  558. 8970  PRINT "KEY TO ERASE THE SHAPE AND ITS VECTORS."
  559. 8980  RETURN 
  560. 8990  REM  -PAGE THREE-
  561. 9000  PRINT "SAVE SHAPE:": PRINT 
  562. 9010  PRINT "  THIS SAVES TO DISK THE FILE OF VECTORS";
  563. 9020  PRINT "THAT DESCRIBES THE SHAPE. PUSHING <ESC>"
  564. 9030  PRINT "<RETURN> ESCAPES BACK TO THE PLOTTING"
  565. 9040  PRINT "FUNCTION.": PRINT : PRINT : PRINT 
  566. 9050  PRINT "LOAD SHAPE:": PRINT 
  567. 9060  PRINT "  WHEN LOADING A VECTOR FILE FROM DISK"
  568. 9070  PRINT "THE SHAPE IS PLOTTED OUT FOR USE IN THE"
  569. 9080  PRINT "RE-PLOT FUNCTION, ETC. IT IS DRAWN FROM"
  570. 9090  PRINT "THE CURSOR LOCATION. IF IT WILL NOT FIT"
  571. 9100  PRINT "ON THE SCREEN YOU WILL BE PROMPTED TO"
  572. 9110  PRINT "MOVE THE CURSOR AND TRY AGAIN."
  573. 9120  PRINT "  USE THE <ESC> KEY TO ESCAPE BACK TO"
  574. 9130  PRINT "THE PLOTTING FUNCTION."
  575. 9140  RETURN 
  576. 9150  REM  -PAGE FOUR-
  577. 9160  PRINT "DOS COMMANDS:": PRINT 
  578. 9170  PRINT "  TWO COMMANDS ARE AVAILABLE: 'CATALOG'"
  579. 9180  PRINT "AND 'DELETE'. NOTE THAT DELETE DOES NOT"
  580. 9190  PRINT "SUPPLY A PREFIX SUCH AS 'VECTORS/' OR"
  581. 9200  PRINT "'TABLE/' FOR THE FILENAME OF THE FILE"
  582. 9210  PRINT "TO BE DELETED."
  583. 9220  PRINT "  USE <ESC> TO RETURN TO THE PLOTTING"
  584. 9230  PRINT "FUNCTION.": PRINT : PRINT 
  585. 9240  PRINT "VIEW SHAPE:": PRINT 
  586. 9250  PRINT "  SHAPES MAY BE VIEWED WITH CONTROL OVER";
  587. 9260  PRINT "THEIR COLOR, SCALE AND ROTATION.  NOTE"
  588. 9270  PRINT "THAT AT SMALLER SCALE FACTORS THERE ARE"
  589. 9280  PRINT "FEWER ANGLES OF ROTATION AVAILABLE."
  590. 9290  PRINT "  USE <ESC> TO RETURN TO THE PLOTTING"
  591. 9300  PRINT "FUNCTION."
  592. 9310  RETURN 
  593. 9320  REM  -PAGE FIVE-
  594. 9330  PRINT "BUILD TABLE:": PRINT 
  595. 9340  PRINT "  WHEN PROMPTED, TYPE IN THE NAMES OF"
  596. 9350  PRINT "THE VECTOR FILES YOU WANT COMBINED INTO"
  597. 9360  PRINT "A SHAPE TABLE. TO INDICATE THE END OF A"
  598. 9370  PRINT "TABLE ENTER 'END' <RETURN>. YOU CAN DO"
  599. 9380  PRINT "A CATALOG OF THE DISK BY TYPING 'C' AND"
  600. 9390  PRINT "<RETURN>; AND TO ABORT BUILDING A TABLE"
  601. 9400  PRINT "ENTER <ESC> <RETURN>.": PRINT : PRINT : PRINT 
  602. 9410  PRINT "VIEW TABLE:": PRINT 
  603. 9420  PRINT "  YOU MAY LOAD A SHAPE TABLE AND VIEW"
  604. 9430  PRINT "ANY OF ITS SHAPES WITH CONTROL OVER THE"
  605. 9440  PRINT "COLOR, SCALE AND ROTATION OF THE SHAPE."
  606. 9450  PRINT "NOTE THAT AT SMALLER SCALE FACTORS THERE";
  607. 9460  PRINT "ARE FEWER ANGLES OF ROTATION AVAILABLE."
  608. 9470  PRINT "  USE <ESC> TO RETURN TO THE MAIN MENU."
  609. 9480  RETURN 
  610. 9500  HOME : PRINT : PRINT "NAME OF EXISTING SHAPE TABLE."
  611. 9510  PRINT : INPUT "TABLE/";W$: IF W$ =  CHR$(27)  OR W$ = ""  THEN  GOTO 420
  612. 9520  ONERR  GOTO 10000
  613. 9530  PRINT D$;"BLOAD TABLE/";W$;",A2561"
  614. 9540 SNUM =  PEEK(2561): IF SNUM > = 256  THEN  GOTO 6290
  615. 9550 TL =  PEEK(43616) + PEEK(43617) *256
  616. 9560 L(SN) = TL - PEEK(AD +(2 *SNUM)) - PEEK(AD +(2 *SNUM) +1) *256
  617. 9570  FOR I = SNUM -1 TO 1  STEP  -1
  618. 9580 L(I) =  PEEK(AD +(I *2) +3) *256 + PEEK(AD +(2 *I) +2) - PEEK(AD +(2 *I) +1) *256 - PEEK(AD +2 *I)
  619. 9590  NEXT I
  620. 9600 AA = AA +TL:TL = 0:AD = AD +2 *(SNUM +1): POKE 216,0: GOTO 6220
  621. 10000  PRINT "ERROR--THAT TABLE IS NOT ON THIS DISK": GOTO 9510